package com.example.blog.utils;

import com.example.blog.domain.UserInformation;
import com.example.blog.domain.Users;
import io.jsonwebtoken.*;

import java.util.Date;
import java.util.UUID;

public class JwtUtils {
    private static final long Time = 1000*60*60*24;  //1天的有效期
   //签名 signature
   private static final String SIGNATURE = "Project_Blog";
    public static String createJwt(UserInformation users){
        //声明一个token对象
        JwtBuilder jwtBuilder = Jwts.builder();
        return jwtBuilder
                //header 类型
                .setHeaderParam("type","JWT") //表示类型type 是 jwt
                .setHeaderParam("alg","HS256")//表示算法alg 是 HS256
                //payload  用户身份的相关信息
                .claim("username",users.getUsername()) //表示用户名字
                .claim("uid",users.getUid()) //表示用户的id
                .setSubject("lyzhnb") //表示主题是 admin-test    JwtUtils.getSubject()
                .setExpiration(new Date(System.currentTimeMillis()+Time)) //有效的时间
                //.setIssuedAt(new Date()) //生成时间
                .setId(UUID.randomUUID().toString()) //设置Jwt的ID,该id生成唯一ID
                //signature 签名信息
                //SignatureAlgorithm.HS256 算法类型
                .signWith(SignatureAlgorithm.HS256, SIGNATURE)  //自定义的签名signature
                .compact();  //返回token


    }
    //校验jwt,返回jwt信息
    public static Claims checkToken(String token) {
        if (token == null) {
            return null;
        }
        //解析令牌  ,如果抛出异常表明token有问题,失效或者无效等 ，否则则没有问题
        Jws<Claims> claimsJwt;
        try {
            //signature签名  token jwt令牌  解密后的信息：claimsJws
           claimsJwt = Jwts.parser().setSigningKey(SIGNATURE).parseClaimsJws(token);
            return  claimsJwt.getBody(); //解析令牌，返回用户的信息
             // System.out.println(claims.getSubject());
             // System.out.println(claims.get("uid"));
             // System.out.println(claims.get("account"));
             // System.out.println(claims.get("username"));
             // System.out.println(claims.getExpiration());
             // System.out.println(claims.getIssuer());
             // System.out.println(claims.getAudience());
             // System.out.println(claims.getNotBefore());
        } catch (Exception e) {
            return null;
        }

    }







//    //随机生成JWT令牌的主题
//    public static String getSubject() {
//        Random b = new Random();
//        String subject;
//        StringBuilder sb = new StringBuilder();
//        for (int i = 0; i < 10; i++) {
//            int index = b.nextInt(30) + 65;
//            sb.append((char) index);
//        }
//        return sb.toString();
//    }

}
